package com.youdoneed.user.feign;

import com.youdoneed.base.application.ResultMessage;
import com.youdoneed.base.pagination.Page;
import com.youdoneed.user.model.CoolfaceNotice;
import com.youdoneed.user.model.FocusRegion;
import com.youdoneed.user.model.User;
import com.youdoneed.user.vo.ContactUser;
import com.youdoneed.user.vo.UserBasicInfo;
import com.youdoneed.user.vo.UserShow;
import com.youdoneed.user.vo.UserStatistics;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;

/**
 * 失败时的方法实现。
 */
@Component
public class UserFallback implements UserFeignClient {

    /**
     * 根据手机号查询用户。
     */
    @Override
    public ResultMessage<User> findByPhoneNo(String phoneNo) {
        return new ResultMessage<User>().toFailure("调用用户服务：根据手机号查询用户失败。");
    }

    /**
     * 根据手机号查询用户。
     */
    @Override
    public ResultMessage<List<User>> findByPhoneNos(String[] phoneNos) {
        return new ResultMessage<List<User>>().toFailure("根据多个手机号查询用户失败。");
    }

    @Override
    public ResultMessage<List<String>> findUserIdsByPhoneNos(String[] phoneNos) {
        return new ResultMessage<List<String>>().toFailure("根据多个手机号查询用户id失败。");
    }

    /**
     * 根据用户ID查询用户。
     */
    @Override
    public ResultMessage<User> getUser(String userId) {
        return new ResultMessage<User>().toFailure("根据用户ID查询用户失败。");
    }

    /**
     * 根据多个UserId获取用户信息。
     */
    @Override
    public ResultMessage<List<User>> getUsers(String[] userIds) {
        return new ResultMessage<List<User>>().toFailure("根据多个用户ID查询用户失败。");
    }

    /**
     * 查找用户并分页。
     */
    @Override
    public ResultMessage<Page<User>> findUsers(int offset, int limit, boolean count, String name) {
        return new ResultMessage<Page<User>>().toFailure("查找用户并分页失败。");
    }

    /**
     * 查询给定的ID范围内的用户。
     */
    @Override
    public ResultMessage<List<UserBasicInfo>> findInUserIds(String[] userIds, String name) {
        return new ResultMessage<List<UserBasicInfo>>().toFailure("查询给定的ID范围内的用户失败。");
    }

    /**
     * 获取别人是否能查看我的好友。
     */
    @Override
    public ResultMessage<Boolean> isCanSeeMyFriends(String userId, String otherId) {
        return new ResultMessage<Boolean>().toFailure("获取别人是否能查看我的好友失败。");
    }

    /**
     * 改变用户的帖子总数。
     */
    @Override
    public ResultMessage totalArticleChange(String userId, Integer totalArticleChange) {
        return new ResultMessage().toFailure("改变用户的帖子总数失败。");
    }

    /**
     * 改变用户的好友总数。
     */
    @Override
    public ResultMessage totalFriendChange(String userId, Integer totalFriendChange) {
        return new ResultMessage().toFailure("改变用户的好友总数失败。");
    }

    /**
     * 管理员统计用户信息。
     */
    @Override
    public ResultMessage<UserStatistics> userStatistics() {
        return new ResultMessage<UserStatistics>().toFailure("管理员统计用户信息失败。");
    }

    /**
     * 判断用户的通讯录的号码今天是否已邀请。
     */
    @Override
    public ResultMessage<List<String>> hasInvitedToday(String[] otherPhoneNos) {
        return new ResultMessage<List<String>>().toFailure("判断用户的通讯录的号码今天是否已邀请失败。");
    }

    /**
     * 附近的用户。
     */
    @Override
    public ResultMessage<List<UserShow>> nearbyUsers(int offset, int limit, Double longitude, Double latitude, Integer maxDistance,Boolean forAddFriend) {
        return new ResultMessage<List<UserShow>>().toFailure("调用附近的用户失败。");
    }

    /**
     * 获取用户选择的关注区域。
     */
    @Override
    public ResultMessage<FocusRegion> checkedFocusRegion() {
        return new ResultMessage<FocusRegion>().toFailure("获取用户选择的关注区域失败。");
    }

    /**
     * 获取推荐的用户
     * @return
     */
    @Override
    public ResultMessage<List<User>> getRecommandUsers() {
        return new ResultMessage<List<User>>().toFailure("获取推荐用户失败。");
    }

    /**
     * 获取用户通讯录中已注册的用户。
     */
    @Override
    public ResultMessage<List<ContactUser>> getContactUsers() {
        return new ResultMessage<List<ContactUser>>().toFailure("获取用户通讯录中已注册的用户。");
    }

    /**
     * 保存coolface通知
     * @return
     */
    @Override
    public ResultMessage<?> saveNotice(CoolfaceNotice coolfaceNotice) {
        return new ResultMessage<>().toFailure("保存coolface通知失败");
    }

    /**
     * 获取coolface通知
     * @return
     */
    @Override
    public ResultMessage<List<CoolfaceNotice>> getNotice() {
        return new ResultMessage<List<CoolfaceNotice>>().toFailure("获取coolface通知失败");
    }

    @Override
    public ResultMessage<?> readCoolfaceNotice(@RequestParam String noticeId) {
        return new ResultMessage<List<CoolfaceNotice>>().toFailure("将消息设置为已读失败");
    }

    @Override
    public ResultMessage<List<User>> getAllUser() {
        return new ResultMessage<List<User>>().toFailure("获取所有用户失败，该接口只提供临时使用");
    }

}